#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u"""
2018.3.22
MySQL数据库Peewee模型，但是不打算用MySQL
打算改用Sqlite3，便于做成样例迁移
"""
from peewee import Model
from peewee import IntegerField
from peewee import CharField
from peewee import MySQLDatabase


__author__ = "张一鸣"
__date__ = "2018.3.22"
__version__ = 0.1


# MySQL connector
db = MySQLDatabase(
    "FFLoop", host="127.0.0.1",
    port=3306, user="2016201050",
    passwd="2016201050"
)


def create_table(table):
    u"""
    检测表是否已经建立
    若没有，则新建

    并不处理任何报错
    :param table: peewee的表格模型
    :return: True 建立成功，False失败, None表格已存在
    """
    if not table.table_exists():
        table.create_table()
        return True
    else:
        return None
    return False


def drop_table(table):
    u"""
    同create_table

    并不处理任何报错
    :param table: peewee的表格模型
    :return: True 删除成功，False删除失败, None表格不存在
    """
    if table.table_exists():
        table.drop_table()
        return True
    else:
        return None
    return False


class BaseModel(Model):
    u"""
    基础数据库模型，与相应的数据库进行链接，或指定其他该数据库的参数
    其他表继承该类即可
    """
    class Meta:
        u"""
        此处设定该数据库共有的参数
        """
        database = db


class EnhancerTable(BaseModel):
    u"""
    样表
    """
    chrom = CharField(index=True)
    start = IntegerField(index=True)
    end = IntegerField(index=True)
    enhancerID = CharField(index=True)
    tissue = CharField(index=True)

    class Meta:
        u"""
        此处设定该表格参数
        """
        db_table = 'CellEnhancerTable'
        order_by = ('chrom', 'start', 'end', )
        indexes = (
            # chrom、start、end比较多的是一起查询，因此三者共同建立一个index，True表明这三个值的组合唯一，不得重复
            (('chrom', 'start', 'end'), True),
            (('chrom', 'start', 'end', 'tissue'), False)
        )


if __name__ == '__main__':
    pass
